import time

from api.input_api import clear_input_field
from tools.logger import log_info


def input_user(window, user_data: str, auto_id: str='PrjNumtxt', name: str='项目号'):
    """
    输入账号
    :param name: 输入框输入的数据类型
    :param auto_id: 输入框的auto_id属性
    :param window: 登陆窗口
    :param user_data: 类似于账号数据
    :return: None
    """
    clear_input_field(window, auto_id, field_name=name)
    user_edit = window.child_window(auto_id=auto_id)
    user_edit.wait('ready', timeout=5)
    user_edit.set_focus()
    user_edit.type_keys(user_data, with_spaces=True)
    log_info(f"✅ {name}输入成功:{user_data}")


def input_password(window, password: str, auto_id: str='WorkOrdertxt', name: str='工单号'):
    """
    输入密码
    :param name: 输入框输入的数据类型
    :param auto_id: 输入框的auto_id属性
    :param window: 登陆窗口
    :param password: 类似于密码数据
    :return: None
    """
    clear_input_field(window, auto_id, field_name=name)
    password_edit = window.child_window(auto_id=auto_id)
    password_edit.wait('ready', timeout=5)
    password_edit.set_focus()
    password_edit.type_keys(password, with_spaces=True)
    log_info(f"✅ {name}输入成功:{'*' * len(password)}")


def select_station(window, station_name: str):
    """
    选择工位站
    :param window: 登陆窗口
    :param station_name: 工位站名称
    :return: None
    """
    combo = window.child_window(auto_id='NowStationcmb')
    combo.wait('ready', timeout=5)
    # 1.点击下拉框
    combo.click_input()
    time.sleep(0.2)

    # 2. 获取所有选项文本（win32 下 ComboBox 支持 .texts()）
    try:
        options = combo.texts()
        log_info(f"🔍 下拉框选项: {options}")
    except Exception as e:
        raise Exception(f"❌ 无法读取下拉框选项: {e}")

    # 3. 查找目标项索引（精确匹配）
    target_index = None
    for i, text in enumerate(options):
        if text.strip() == station_name.strip():
            target_index = i
            break

    if target_index is None:
        raise Exception(f"❌ 工位站不在选项中: '{station_name}'，可用选项: {options}")

    # 4. 计算目标项的点击坐标（下拉项高度通常为 16~20 像素）
    rect = combo.rectangle()
    item_height = 18  # 可根据实际调整（常见值：16, 18, 20）
    click_x = rect.left + 10
    click_y = rect.top + 30 + target_index * item_height  # 30 是下拉框头部偏移（经验值）

    # 5. 使用桌面坐标点击
    from pywinauto import mouse
    mouse.click(coords=(click_x, click_y))
    time.sleep(0.2)

    log_info(f"✅ 工位站选择成功: {station_name} (索引: {target_index})")


def click_button(window, name: str='确定'):
    """
    点击确定按钮
    :param name: 按钮名称
    :param window: 窗口
    :return: None
    """
    button = window.child_window(title=name)
    button.wait('visible enabled', timeout=5)
    button.click_input()
    log_info(f"✅ 已点击【{name}】按钮")
